iT邦幫忙

0

Python sort() 和 sorted() 的比較

  • 分享至 

  • xImage
  •  

sort() 和 sorted() 的比較

1. sort() 方法

定義

  • sort() 是列表(list)的內置方法,用於對列表進行就地排序。
  • 它會直接改變原始列表的順序,並且不會返回任何值(返回 None)。
    語法
# 創建一個列表
numbers = [5, 2, 9, 1, 5, 6]

# 使用 sort() 進行升序排序
numbers.sort()
print(numbers)  # 輸出:[1, 2, 5, 5, 6, 9]

# 使用 sort() 進行降序排序
numbers.sort(reverse=True)
print(numbers)  # 輸出:[9, 6, 5, 5, 2, 1]

# 使用 key 參數來根據絕對值排序
numbers = [-5, -1, 2, -3]
numbers.sort(key=abs)
print(numbers)  # 輸出:[-1, 2, -3, -5]

2. sorted() 函數

定義
sorted() 是一個內置函數,可以對任何可迭代對象(如列表、元組、集合、字符串等)進行排序。
它不會改變原始數據,而是返回一個新的已排序的列表。
語法

sorted(iterable, key=None, reverse=False)

參數:
iterable:要排序的可迭代對象。
key:可選,指定一個函數,用於從每個可迭代元素中提取一個用於比較的鍵。
reverse:可選,布林值,若設為 True,則將列表按降序排序。

# 創建一個列表
numbers = [5, 2, 9, 1, 5, 6]

# 使用 sorted() 進行升序排序
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 輸出:[1, 2, 5, 5, 6, 9]
print(numbers)         # 輸出:[5, 2, 9, 1, 5, 6]  (原始列表不變)

# 使用 sorted() 進行降序排序
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc)  # 輸出:[9, 6, 5, 5, 2, 1]

# 使用 key 參數來根據絕對值排序
numbers = [-5, -1, 2, -3]
sorted_numbers_abs = sorted(numbers, key=abs)
print(sorted_numbers_abs)  # 輸出:[-1, 2, -3, -5]

參數 reverse=True 的詳細解釋
默認行為:如果你不指定 reverse 參數(或使用默認的 reverse=False),排序結果會是從小到大的升序排序。
使用 reverse=True:當你指定 reverse=True 時,sorted() 函數會將結果反轉,從大到小排序,這就是降序排序。

如果是要sorted dictionary 是如何運用?

在 Python 中,字典(dictionary)本身是一種無序的數據結構,因此無法直接對字典進行排序。然而,我們可以使用 sorted() 函數來根據字典的鍵或值進行排序,並返回排序後的結果(通常以元組列表的形式)。
這樣我們就能依據不同的需求對字典進行靈活的排序操作。

my_dict = {'apple': 3, 'banana': 1, 'cherry': 2}

升序按**鍵**排序
要根據字典的鍵進行升序排序,可以直接對字典的鍵使用 sorted():
sorted_by_keys = sorted(my_dict)  # 只返回排序後的鍵
print(sorted_by_keys)  # 輸出:['apple', 'banana', 'cherry']

# 如果你想要得到排序後的鍵-值對:
sorted_dict_by_keys = dict(sorted(my_dict.items()))
print(sorted_dict_by_keys)  # 輸出:{'apple': 3, 'banana': 1, 'cherry': 2}

3. sort() 和 sorted() 的比較

特點 sort() sorted()
用法 列表的方法 內置函數
返回值 None(原地排序,不返回值) 返回新的排序後的列表
作用對象 僅限於列表 任何可迭代對象(如列表、元組等)
改變原始數據 會改變原始列表 不會改變原始數據
排序方式 可以升序或降序排序 可以升序或降序排序
使用 key 參數 支持 支持

為什麼可以考慮只使用 sorted()?

1.不改變原始數據:
sorted() 不會修改原始的可迭代對象,它會返回一個新的已排序列表。這對於保持數據完整性特別重要,避免無意中改變了原始數據。

2.適用於所有可迭代對象:
sorted() 不僅適用於列表,還可以對元組、集合、字符串等進行排序,而 sort() 只能用於列表。這使得 sorted() 更加通用。

3.靈活性:
無論你是對列表進行排序,還是對其他不可變對象(如 tuple、set)進行排序,sorted() 都能應對。而且,它與 key 和 reverse 參數的配合使用也相當靈活。

什麼情況下使用 sort()?

儘管 sorted() 很好,但在某些情況下使用 sort() 仍有它的價值:

  • 性能考量:如果你不需要保留原始列表,並且想避免創建一個新的列表,sort() 會更高效,因為它是就地排序,不需要分配額外的內存來存放新的列表。
  • 列表操作:當你確定只對列表進行操作,而且不在意原始列表的變化,sort() 是一個簡潔且高效的選擇。

總結

使用 sort():

當你想對一個列表進行就地排序時,可以使用 sort() 方法。
這種方法適合在你不需要保留原始列表的情況下進行排序。

使用 sorted():

當你需要對其他可迭代對象進行排序,或需要保留原始數據時,使用 sorted() 函數。
sorted() 是更通用和靈活的選擇,因為它可以用於多種類型的數據。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言